from django.contrib.auth.models import User
from django.db import models

# Create your models here.

"""
int -- IntegerField 整型
varchar -- CharField 字符类型
longtext -- TextField 文本类型
date -- DateField 日期类型
BooleanField 布尔类型
DateTimeField 日期时间类型
ImageField 图片文件类型
FileField 文件类型
AutoField 自增长类型

字段常用的属性 表约束
unique 唯一约束
null 非空约束(默认) 指定True
primary_key 主键约束
default 设置默认值
blank 表单提交的值可以为空
auto_now 即时更新当前时间
auto_now_add 第一次会设置当前时间，以后不会变更
"""

# 继承models.Model成为模型
# 创建完模型类之后都需要迁移映射
class Classes(models.Model):
    # 设置自增长约束 主键约束
    id = models.AutoField(primary_key=True)
    # 限制最长字段值为30 默认都有非空约束 设置可以为空null=True
    name = models.CharField(max_length=30)

    # slogan = models.CharField(max_length=50)

    # 重写 输出魔法方法
    def __str__(self):
        return self.name


# # 创建标签模型
class Label(models.Model):
    name = models.CharField(max_length=30, unique=True)

    # 重写输出魔法方法
    def __str__(self):
        return self.name
        # return 'Label<name:%s>' % self.name


# 创建用户详情表
class UserDetail(models.Model):
    # blank=True 前端的传值可以为空 null=True 数据表里的值可以为空
    age = models.BigIntegerField(null=True,blank=True)
    sex = models.BooleanField(null=True,blank=True)
    # 关联用户表 指定user表的数据被删除时，用户详情表的数据也一起被删除
    user=models.OneToOneField(User,on_delete=models.CASCADE)

# 创建文章表
class Article(models.Model):
    # 文章标题
    title = models.CharField(max_length=30)
    # 文章简介
    desc = models.CharField(max_length=100)
    # 文章内容
    content = models.TextField()
    # 封面画 保存的图片地址 路由 图片保存在服务器
    cover = models.TextField()
    # 创建时间 日期时间类型
    create_time = models.DateTimeField(auto_now_add=True)
    # 更新时间
    update_time=models.DateTimeField(auto_now=True)

    # 建立表关系 约束
    # 跟文章表分类的表约束 NOT_RPOVIDED当还有文章时限制删除分类表
    # 第一个参数是关联的表 第二个是参数是删除行为
    classes = models.ForeignKey(Classes,on_delete=models.NOT_PROVIDED)

    # 跟用户表的表约束
    user = models.ForeignKey(User,on_delete=models.CASCADE)
    # 多对多表关系建立 建立删除行为 因为多对多会产生关系表
    # 关系表会自动创建
    label = models.ManyToManyField(Label)

    def __str__(self):
        return 'Article<title:%s>' % self.title























